Long functions splitted.
[f432xdd.git] / java / Graph Editor / src / models / GraphModel.java
blob9b2097a82d836c9aa1b54aa967d8537c983fc9df
1 package models;
3 import java.io.*;
4 import java.util.List;
5 import java.util.ArrayList;
6 import java.util.Observable;
7 import java.util.Observer;
8 import java.util.Scanner;
11 public class GraphModel extends Observable implements Observer{
12 private List<GraphEdge> edges;
13 private List<GraphVertex> vertexes;
16 public GraphVertex[] getVertexes(){
17 GraphVertex[] a = new GraphVertex[vertexes.size()];
18 return vertexes.toArray(a);
20 public GraphEdge[] getEdges(){
21 GraphEdge[] a = new GraphEdge[edges.size()];
22 return edges.toArray(a);
25 public GraphModel(){
26 edges = new ArrayList<GraphEdge>();
27 vertexes = new ArrayList<GraphVertex>();
30 public synchronized void setChanged() {
31 super.setChanged();
32 notifyObservers();
35 public void addEdge(GraphEdge ... edge){
36 for(int i=0; i < edge.length; i++){
37 edges.add(edge[i]);
38 edge[i].addObserver(this);
40 setChanged();
43 public void addGraph(GraphVertex ... vertex){
44 for(int i=0; i < vertex.length; i++){
45 vertexes.add(vertex[i]);
46 vertex[i].addObserver(this);
48 setChanged();
51 public void removeEdge(GraphEdge ... edge){
52 for(int i=0; i < edge.length; i++){
53 edges.remove(edge[i]);
54 edge[i].deleteObserver(this);
56 setChanged();
58 public void removeGraph(GraphVertex ... vertex){
59 for(int i=0; i < vertex.length; i++){
60 vertexes.remove(vertex[i]);
61 vertex[i].deleteObserver(this);
63 setChanged();
66 public GraphVertex getGraphByCoordinate(int x, int y){
67 for(int i=0; i < vertexes.size(); i++){
68 if(vertexes.get(i).isAt(x, y))
69 return vertexes.get(i);
71 return null;
74 @Override
75 public void update(Observable arg0, Object arg1) {
76 if(vertexes.contains(arg0) || edges.contains(arg0)){
77 this.setChanged();
81 public void writeToFile(File file) throws Exception
83 FileOutputStream fos = new FileOutputStream(file);
84 OutputStreamWriter out = new OutputStreamWriter(fos, "UTF-8");
86 out.write(vertexes.size() + " " + edges.size() + "\r\n");
87 for(int i=0; i < vertexes.size(); i++)
88 out.write(vertexes.get(i).getX() + " " + vertexes.get(i).getY() + " " + vertexes.get(i).getWidth() + " " + vertexes.get(i).getHeight() +" "+ vertexes.get(i).getName() + "\r\n");
89 for(int i=0; i < edges.size(); i++)
90 out.write(vertexes.indexOf(edges.get(i).getEdge(false)) + " " + vertexes.indexOf(edges.get(i).getEdge(true)) + "\r\n");
91 out.flush();
92 out.close();
93 fos.flush();
94 fos.close();
97 public void writeToFile(String file) throws Exception
99 writeToFile(new File(file));
102 private static GraphVertex[] readVertexes(int count, Scanner s)
104 GraphVertex[] vertexes = new GraphVertex[count];
105 for(int i=0; i < count; i++)
106 vertexes[i] = new GraphVertex(s);
107 return vertexes;
111 public static GraphModel fromFile(File file) throws Exception
113 GraphModel model = new GraphModel();
114 Scanner scanner = new Scanner(file, "UTF-8");
116 int numKnopen = scanner.nextInt();
117 int numKanten = scanner.nextInt();
118 scanner.nextLine();
120 GraphVertex[] vertexes = readVertexes(numKnopen,scanner);
121 GraphEdge[] edges = readKanten(scanner, numKanten, vertexes);
123 model.addEdge(edges);
124 model.addGraph(vertexes);
126 return model;
128 private static GraphEdge[] readKanten(Scanner scanner, int numKanten,
129 GraphVertex[] vertexes) {
130 GraphEdge[] edges = new GraphEdge[numKanten];
131 for (int i = 0; i < numKanten; i++) {
132 int obj1 = scanner.nextInt();
133 int obj2 = scanner.nextInt();
134 edges[i] = new GraphEdge(vertexes[obj1], vertexes[obj2]);
135 if(i != (numKanten-1)){
136 scanner.nextLine();
139 return edges;
143 public static GraphModel fromFile(String fileName) throws Exception
145 File file = new File(fileName);
146 return fromFile(file);